package com.yida.gwj.deposit.service;

import com.yida.common.core.web.page.TableDataInfo;
import com.yida.gwj.api.domain.request.RemoteGwjFinanceAccountDetailRequest;
import com.yida.gwj.api.domain.request.RemoteGwjFinanceAccountMainRequest;
import com.yida.gwj.deposit.domain.GwjDepositBusiness;
import com.yida.gwj.deposit.domain.GwjDepositBusinessLog;
import com.yida.gwj.deposit.domain.dto.GwjBusinessFlowDTO;

import java.util.List;
import java.util.Map;

/**
 * 业务（缴存业务管理）Service接口
 *
 * @author lqq
 * @date 2023-01-09
 */
public interface IGwjDepositBusinessService {
	/**
	 * 查询业务（缴存业务管理）
	 *
	 * @param bizId 业务（缴存业务管理）主键
	 * @return 业务（缴存业务管理）
	 */
	public GwjDepositBusiness selectGwjDepositBusinessByBizId(Long bizId);

	/**
	 * 查询业务（缴存业务管理）列表
	 *
	 * @param gwjDepositBusiness 业务（缴存业务管理）
	 * @return 业务（缴存业务管理）集合
	 */
	public List<GwjDepositBusiness> selectGwjDepositBusinessList(GwjDepositBusiness gwjDepositBusiness);

	/**
	 * 新增业务（缴存业务管理）
	 *
	 * @param gwjDepositBusiness 业务（缴存业务管理）
	 * @return 结果
	 */
	public int insertGwjDepositBusiness(GwjDepositBusiness gwjDepositBusiness);

	/**
	 * 修改业务（缴存业务管理）
	 *
	 * @param gwjDepositBusiness 业务（缴存业务管理）
	 * @return 结果
	 */
	public int updateGwjDepositBusiness(GwjDepositBusiness gwjDepositBusiness);

	/**
	 * 批量删除业务（缴存业务管理）
	 *
	 * @param bizIds 需要删除的业务（缴存业务管理）主键集合
	 * @return 结果
	 */
	public int deleteGwjDepositBusinessByBizIds(Long[] bizIds);

	/**
	 * 删除业务（缴存业务管理）信息
	 *
	 * @param bizId 业务（缴存业务管理）主键
	 * @return 结果
	 */
	public int deleteGwjDepositBusinessByBizId(Long bizId);

	/**
	 * 验证当前用户是否有操作权限
	 *
	 * @param bizId 业务ID
	 * @return /
	 */
	GwjDepositBusiness checkPermission(Long bizId);

	/**
	 * 送件
	 *
	 * @param gwjDepositBusinessLog 意见请求参数
	 */
	void send(GwjDepositBusinessLog gwjDepositBusinessLog);

	/**
	 * 签署意见
	 *
	 * @param gwjDepositBusinessLog 意见请求参数
	 */
	void signOpinion(GwjDepositBusinessLog gwjDepositBusinessLog);

	/**
	 * 回退
	 *
	 * @param gwjDepositBusinessLog 意见请求参数
	 */
	void fallback(GwjDepositBusinessLog gwjDepositBusinessLog);

	/**
	 * 业务作废
	 *
	 * @param gwjDepositBusinessLog 业务id
	 */
	void invalidBusiness(GwjDepositBusinessLog gwjDepositBusinessLog);

	/**
	 * 删除业务小区、房屋、楼栋、业主
	 *
	 * @param bizId 业务ID
	 */
	void deleteCommunityBuildHouseOwnerData(Long bizId);

	/**
	 * 查询业务流程
	 *
	 * @param bizId     业务ID
	 * @param bizFlagId 业务标识
	 * @return /
	 */
	List<GwjBusinessFlowDTO> getBusinessFlow(Long bizId, Integer bizFlagId);


	/**
	 * 生成流水
	 * @param bizId 业务主键
	 * @return
	 */
	Boolean generateLedger(Long bizId);

	/**
	 * 删除流水
	 * @param bizId 业务主键
	 */
	Boolean removeLedger(Long bizId);

	/**
	 * 修改流水对账状态
	 * @param bizId 业主主键
	 * @param checkStatus 对账状态
	 * @return
	 */
	Boolean edisLedgerStatus(Long bizId,String checkStatus);


	/**
	 * 查询总账列表
	 * @param mainRequest 总账查询参数
	 * @return
	 */
	TableDataInfo selectGwjFinanceAccountMainList(RemoteGwjFinanceAccountMainRequest mainRequest);

	/**
	 * 查询分账列表
	 * @param detailRequest 分账查询参数
	 * @return
	 */
	TableDataInfo selectGwjFinanceAccountDetailList(RemoteGwjFinanceAccountDetailRequest detailRequest);

	/**
	 * 查询对账方式
	 * @return
	 */
	Map<String,String> getCheckAccountType();

	/**
	 * 查询对账状态
	 * @return
	 */
	Map<String,String>  getCheckAccountStatus();
}
